package org.uma.kri.nyu.mor.almas;

import java.util.ArrayList;

import org.uma.kri.nyu.mor.almas.application.AlmasApplication;
import org.uma.kri.nyu.mor.almas.util.ContactsUtil;
import org.uma.kri.nyu.mor.almas.util.TelBookPagerAdapter;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;

public class MainActivity extends AlmasBaseActivity {

	private DrawerLayout mDrawerLayout;
	private ListView mDrawerList;
	private ActionBarDrawerToggle mDrawerToggle;
	
	private ViewPager mViewPager;
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		// アクションバーを取得
		ActionBar actionBar = getSupportActionBar();
		
		// アイコンを表示しない
//		actionBar.setDisplayShowHomeEnabled(false);
		// SHOW_TITLEのフラグを消すことで、タイトル表示を消す
//		actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
			
//		// ActionBarにタブを表示する
//		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//		// アクションバーにタブを追加
//		actionBar.addTab(actionBar.newTab().setText("Tab 1").setTabListener(this));
//		actionBar.addTab(actionBar.newTab().setText("Tab 2").setTabListener(this));
//		actionBar.addTab(actionBar.newTab().setText("Tab 3").setTabListener(this));

		// ViewPagerのインスタンス生成
		mViewPager = (ViewPager) findViewById(R.id.pager);
		mViewPager.setAdapter(
		new TelBookPagerAdapter(
			getSupportFragmentManager()));
		
//		// ActionBarにリストを表示する
//		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
//		ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActionBarThemedContextCompat(),
//				android.R.layout.simple_spinner_dropdown_item, new String[] {
//						"List Item 1", "List Item 2" });
//		actionBar.setListNavigationCallbacks(adapter,
//				new ActionBar.OnNavigationListener() {
//					@Override
//					public boolean onNavigationItemSelected(int itemPosition,
//							long itemId) {
//						return false;
//					}
//				});
		
		//TabHostオブジェクト取得
		final TabHost tabhost = (TabHost)findViewById(R.id.tabhost);
		tabhost.setup();
		//Tab1設定
		TabSpec tab1 = tabhost.newTabSpec("tab1");
		tab1.setIndicator("タブ１");
		tab1.setContent(R.id.tabContentlayout1);
		tabhost.addTab(tab1);
		//Tab2設定
		TabSpec tab2 = tabhost.newTabSpec("tab2");
		tab2.setIndicator("タブ２");
		tab2.setContent(R.id.tabContentlayout2);
		tabhost.addTab(tab2);
		//Tab3設定
		TabSpec tab3 = tabhost.newTabSpec("tab3");
		tab3.setIndicator("タブ３");
		tab3.setContent(R.id.tabContentlayout3);
		tabhost.addTab(tab3);
		//初期表示するタブ
		tabhost.setCurrentTab(0);
		tabhost.setOnTabChangedListener(new OnTabChangeListener() {
			@Override
			public void onTabChanged(String tabId) {
				mViewPager.setCurrentItem(tabhost.getCurrentTab());
			}
		});
		
		// スワイプしたときにもActionbarのタブ（NavigationItem）を常に表示させる処理
		mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
			@Override
			public void onPageSelected(int position) {
					tabhost.setCurrentTab(position);
			}
		});
		
		
		// アカウント一覧をNavigationDrawerに設定
		final ArrayList<String> accountList = ContactsUtil.getAccountList();
		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		mDrawerList = (ListView) findViewById(R.id.left_drawer);
		// ListViewにアダプターを設定
		mDrawerList.setAdapter(new ArrayAdapter<String>(this,
				R.layout.drawer_list_item, accountList));
		// ListViewアイテム選択イベント
		mDrawerList.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				String account = (String)mDrawerList.getItemAtPosition(position);
				// 選択したアカウントをActionBarのタイトルに設定
				setTitle(account);
				// 選択したアカウントを現在アカウントとして設定
				AlmasApplication.setCurrentAccount(account);
			}
		});
		
		// カレントアカウントがアカウントリストに存在する場合にタイトルを変更
		if(accountList.contains(AlmasApplication.getCurrentAccount())){
			// 選択したアカウントをActionBarのタイトルに設定
			setTitle(AlmasApplication.getCurrentAccount());
		}
		
		mDrawerToggle = new ActionBarDrawerToggle(
				this,                  /* host Activity */
				mDrawerLayout,         /* DrawerLayout object */
				R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
				R.string.drawer_open,  /* "open drawer" description */
				R.string.drawer_close  /* "close drawer" description */
				) {
			
			/** Called when a drawer has settled in a completely closed state. */
			public void onDrawerClosed(View view) {
			}
			
			/** Called when a drawer has settled in a completely open state. */
			public void onDrawerOpened(View drawerView) {
//				int index = accountList.indexOf(AlmasApplication.getCurrentAccount());
//				// カレントアカウントを初期選択状態とする。
//				mDrawerList.setSelection(index);
			}
		};
		
		// Set the drawer toggle as the DrawerListener
		mDrawerLayout.setDrawerListener(mDrawerToggle);
		
		// Set the drawer toggle as the DrawerListener
		mDrawerLayout.setDrawerListener(mDrawerToggle);
		
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setHomeButtonEnabled(true);
		
//		// FragmentTabHostのインスタンス生成
//		FragmentTabHost fragmentTabHost = (FragmentTabHost) findViewById(R.id.maintabhost);
//		fragmentTabHost.setup(this, getSupportFragmentManager(), R.id.fragmentlayout);
//
//		TabSpec tabSpec1 = fragmentTabHost.newTabSpec("Group");
//		Button button1 = new Button(this);
//		button1.setBackgroundResource(android.R.drawable.ic_menu_sort_by_size);
//		tabSpec1.setIndicator(button1);
//		Bundle bundle1 = new Bundle();
//		bundle1.putString("name", "Group");
//		fragmentTabHost.addTab(tabSpec1, GroupFragment.class, bundle1);
//
//		TabSpec tabSpec2 = fragmentTabHost.newTabSpec("History");
//		Button button2 = new Button(this);
//		button2.setBackgroundResource(android.R.drawable.ic_menu_recent_history);
//		tabSpec2.setIndicator(button2);
//		Bundle bundle2 = new Bundle();
//		bundle2.putString("name", "History");
//		fragmentTabHost.addTab(tabSpec2, HistoryFragment.class, bundle2);
//
//		TabSpec tabSpec3 = fragmentTabHost.newTabSpec("List");
//		Button button3 = new Button(this);
//		button3.setBackgroundResource(android.R.drawable.ic_menu_sort_alphabetically);
//		tabSpec3.setIndicator(button3);
//		Bundle bundle3 = new Bundle();
//		bundle3.putString("name", "List");
//		fragmentTabHost.addTab(tabSpec3, ListSearchFragment.class, bundle3);
	}
	
//	//4.0以上の時、リスト表示のテーマの変更（これをしないと字が黒くなる）
//	private Context getActionBarThemedContextCompat() {
//		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
//			return getSupportActionBar().getThemedContext();
//		} else {
//			return this;
//		}
//	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		
		MenuItem item = menu.add("HELP").setIcon(android.R.drawable.ic_menu_help);
		MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
		
		return true;
	}
	
	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		// Sync the toggle state after onRestoreInstanceState has occurred.
		mDrawerToggle.syncState();
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		mDrawerToggle.onConfigurationChanged(newConfig);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Pass the event to ActionBarDrawerToggle, if it returns
		// true, then it has handled the app icon touch event
		if (mDrawerToggle.onOptionsItemSelected(item)) {
		return true;
		}
		// Handle your other action bar items...

		return super.onOptionsItemSelected(item);
	}
}
